const fs = require('fs');
const path = require('path');
const readline = require('readline'); // 用于优雅处理终端输入（比 process.stdin 更简洁）

// 1. 创建 readline 接口，处理用户输入
const rl = readline.createInterface({
  input: process.stdin,  // 输入源：终端
  output: process.stdout // 输出源：终端（自动回显输入内容）
});

// 存储创建的文件夹名（用于后续创建/删除文件时定位路径）
let createdDir = '';

// 2. 步骤1：提示创建文件夹
function promptCreateDir() {
  rl.question('请输入要创建的文件夹（格式：mkdir 文件夹名，如 "mkdir filedir"）：\n', (input) => {
    // 解析输入：拆分命令和参数（支持多空格，用正则 split(/\s+/)）
    const [cmd, dirName] = input.trim().split(/\s+/);

    // 验证输入格式
    if (cmd !== 'mkdir' || !dirName) {
      console.error('错误：格式不正确！请输入 "mkdir 文件夹名"（如 mkdir filedir）\n');
      promptCreateDir(); // 重新提示
      return;
    }

    // 拼接文件夹路径
    const dirPath = path.join(__dirname, dirName);

    // 创建文件夹（recursive: false 表示不创建父文件夹，符合实验要求）
    fs.mkdir(dirPath, { recursive: false }, (err) => {
      if (err) {
        if (err.code === 'EEXIST') {
          console.error(`错误：文件夹 "${dirName}" 已存在！\n`);
        } else {
          console.error(`错误：创建文件夹失败\n原因：${err.message}\n`);
        }
        promptCreateDir(); // 重新提示
        return;
      }

      // 创建成功，记录文件夹名，进入下一步
      createdDir = dirName;
      console.log(`✅ 文件夹创建成功！路径：${dirPath}\n`);
      promptCreateFile(); // 步骤2：提示创建文件
    });
  });
}

// 3. 步骤2：提示创建文件（在已创建的文件夹下）
function promptCreateFile() {
  rl.question(`请输入要创建的文件（格式：touch 文件名，如 "touch file.txt"，将创建在 "${createdDir}" 下）：\n`, (input) => {
    const [cmd, fileName] = input.trim().split(/\s+/);

    // 验证输入格式
    if (cmd !== 'touch' || !fileName) {
      console.error('错误：格式不正确！请输入 "touch 文件名"（如 touch file.txt）\n');
      promptCreateFile(); // 重新提示
      return;
    }

    // 拼接文件路径（在已创建的文件夹下）
    const filePath = path.join(__dirname, createdDir, fileName);
    const fileContent = 'hello node'; // 固定文件内容

    // 创建文件并写入内容（fs.writeFile 不存在则创建，存在则覆盖）
    fs.writeFile(filePath, fileContent, 'utf8', (err) => {
      if (err) {
        console.error(`错误：创建文件失败\n原因：${err.message}\n`);
        promptCreateFile(); // 重新提示
        return;
      }

      // 创建成功，进入下一步
      console.log(`✅ 文件创建成功！路径：${filePath}，内容："${fileContent}"\n`);
      promptDeleteFile(); // 步骤3：提示删除文件
    });
  });
}

// 4. 步骤3：提示删除文件（在已创建的文件夹下）
function promptDeleteFile() {
  rl.question(`请输入要删除的文件（格式：delete 文件名，如 "delete file.txt"，将删除 "${createdDir}" 下的文件）：\n`, (input) => {
    const [cmd, fileName] = input.trim().split(/\s+/);

    // 验证输入格式
    if (cmd !== 'delete' || !fileName) {
      console.error('错误：格式不正确！请输入 "delete 文件名"（如 delete file.txt）\n');
      promptDeleteFile(); // 重新提示
      return;
    }

    // 拼接文件路径
    const filePath = path.join(__dirname, createdDir, fileName);

    // 删除文件（fs.unlink 用于删除文件）
    fs.unlink(filePath, (err) => {
      if (err) {
        if (err.code === 'ENOENT') {
          console.error(`错误：文件 "${fileName}" 不存在！\n`);
        } else {
          console.error(`错误：删除文件失败\n原因：${err.message}\n`);
        }
        promptDeleteFile(); // 重新提示
        return;
      }

      // 删除成功，退出程序
      console.log(`✅ 文件删除成功！路径：${filePath}`);
      console.log('程序已完成所有任务，退出！');
      rl.close(); // 关闭 readline 接口
      process.exit(0); // 正常退出程序
    });
  });
}

// 启动流程：从步骤1开始
console.log('=== Node.js 文件管理器 ===');
console.log('请按步骤完成以下操作：\n');
promptCreateDir();